When data is moved across a transmission link from a sending node to a receiving node, such as over Fibre Channel, Ethernet, PCIX bus, PCI Express, iSCSI, or the like, the data is broken into data packets sized to accommodate the buffer size of the receiving node. The order in which the packets are received at the receiving node is sometimes different from the order in which the data packets are sent from the sending node. This unordering of the data can occur for many reasons: the two nodes may be part of a large fabric with many routers and switches in between, so that not every packet traverses the transmission link in the same way. Also, the sending node may elect to send the packets starting in the middle of the block of data rather than beginning. Unordering of the data creates problems in verifying data integrity.
Presently, each data packet includes a data segment of the desired size and a descriptor which indicates the location of the data segment within the data. An error protection code, such as a cyclic redundancy check (CRC) code, is calculated for the data packet at the sending node and transmitted to the receiving node with the data packet. At the receiving node, a received CRC code is calculated and compared to the transmitted CRC code. The data segment of the data packet is moved to a buffer location as designated by the descriptor if the received and the transmitted CRC codes are equal.
A buffer CRC code is calculated as the data segments are moved to the buffer location. Because the CRC code calculation depends on the order of the data processed, the buffer CRC code depends on the order in which the data packets are received an their data segments moved to the buffer location. A process CRC code calculated as the re-ordered data is moved sequentially from the buffer for processing is not equal to the buffer CRC code. Therefore, the process CRC code cannot be compared to the buffer CRC code to verify the integrity of the re-ordered data.
It would be desirable to have an error detection method for unordered data delivery that would overcome the above disadvantages.